/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DA;

import BE.BEPallet;
import BL.BLPaleta;
import BL.BLPosicionxrack;
import BL.BLProducto;
import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.JOptionPane;

/**
 *
 * @author Cristian
 */
public class DAPallet {

    
    public void agregarPalletCargaMasiva (BEPallet pallet)
    {
        //SimpleDateFormat formateador = new SimpleDateFormat("yyyy-mm-dd");
        DAConexion bd = new DAConexion();
        Connection con = null;
        PreparedStatement s = null;
        java.util.Date fecha = new Date();

        String query = "INSERT INTO PALLET (idpallet,idproducto,idpaleta,fechavencimiento,fecharegistro,estado,cantidad) VALUES ("
                + pallet.getIdPallet() + "," + pallet.getProducto().getIdProducto()+ "," + pallet.getPaleta().getIdPallet() + ",'" +
                pallet.getFechaVencimiento()+ "','" + pallet.getFechaRegistro()+"','REGISTRADO',"+pallet.getCantidad()+")";
       
        try
        { 

            con = bd.conectar();
            s = con.prepareStatement(query);
            s.execute();
            
            pallet.getPaleta().setEstado(3);
            DAPaleta dapaleta = new DAPaleta ();
            dapaleta.modificaPallet(pallet.getPaleta());

       //JOptionPane.showMessageDialog(null,"Se ingreso el pallet correctamente",
                                          //    "Informacion",JOptionPane.INFORMATION_MESSAGE);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de insertar datos"+e,
                        "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            
        }

        bd.cierraConexion(con);
        
    }
    
     public void agregarPallet (BEPallet pallet)
    {
        SimpleDateFormat formateador = new SimpleDateFormat("yyyy-mm-dd");
        DAConexion bd = new DAConexion();
        Connection con = null;
        PreparedStatement s = null;
        java.util.Date fecha = new Date();

        //int n=getCantidad(pallet.getProducto().getIdProducto(),pallet.getPaleta().getIdPallet());


        String query = "INSERT INTO PALLET (idproducto,idpaleta,fechavencimiento,fecharegistro,estado,cantidad) VALUES ("
                + pallet.getProducto().getIdProducto()+ "," + pallet.getPaleta().getIdPallet() + ",'" +
                pallet.getFechaVencimiento()+ "','" + fecha+"','REGISTRADO',"+pallet.getCantidad()+")";
       
        try
        { 

            con = bd.conectar();
            s = con.prepareStatement(query);
            s.execute();
            
            pallet.getPaleta().setEstado(3);
            DAPaleta dapaleta = new DAPaleta ();
            dapaleta.modificaPallet(pallet.getPaleta());

       JOptionPane.showMessageDialog(null,"Se ingreso el pallet correctamente",
                                              "Informacion",JOptionPane.INFORMATION_MESSAGE);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de insertar datos",
                        "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            
        }

        bd.cierraConexion(con);
        
    }
        public int getCapacidad (int idProducto,int idPaleta)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        int n;
        String query = "SELECT CANTIDAD FROM productoxtipopaleta WHERE idtipopallet = " + idPaleta+
                " AND idproducto=" + idProducto;
        
        //JOptionPane.showMessageDialog(null,query,"Querry",JOptionPane.ERROR_MESSAGE);

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            rs.next();

            n=rs.getInt("CANTIDAD");

        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"Error al obtener cantidad de productos",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 0;
        }

        bd.cierraConexion(con);
        return n;

    }
     
     
     
     
         public BEPallet getPalletbyId (int idPallet)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        BEPallet contacto = null;
        String query = "SELECT * FROM pallet WHERE idpallet = " + idPallet;

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            rs.next();
            contacto = new BEPallet();
            
            contacto.setIdPallet(rs.getInt("IDPALLET"));
            contacto.setFechaVencimiento(rs.getDate("FECHAVENCIMIENTO"));
            
            BLProducto blprod = new BLProducto();
            contacto.setIdProducto(blprod.getProdbyId(rs.getInt("IDPRODUCTO")));

            BLPaleta blpal = new BLPaleta();
            contacto.setPaleta(blpal.getPaletabyID(rs.getInt("IDPALETA")));

            contacto.setFechaVencimiento(rs.getDate("FECHAREGISTRO"));
            contacto.setEstado(rs.getString("ESTADO"));
            contacto.setCantidad(rs.getInt("CANTIDAD"));

            BLPosicionxrack blposicion =new BLPosicionxrack();
            contacto.setPosicionxrack(blposicion.getById(rs.getInt("idposicionxrack")));


        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"Error al obtener pallet",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return contacto;
    }

    public List<BEPallet> getPalletbyProveedor (int idProveedor)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        BLProducto blprod = new BLProducto();
        BEPallet contacto = null;
        BLPaleta blpal = new BLPaleta();
        BLPosicionxrack blposicion =new BLPosicionxrack();
        String query = "SELECT idpallet,cantidad,fechavencimiento,p.idproducto,idpaleta,FECHAREGISTRO,p.estado, idposicionxrack FROM pallet p, productoxcontacto pxc WHERE pxc.idcontacto = " + idProveedor
                            + " AND p.idproducto=pxc.Idproducto";


         List <BEPallet> lspallet = new ArrayList <BEPallet>();
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);
            bd.cierraConexion(con);
            
            
            while(rs.next()){
            contacto = new BEPallet();
            System.out.println("Sacando pallet #: " );
            contacto.setIdPallet(rs.getInt("IDPALLET"));
            contacto.setFechaVencimiento(rs.getDate("FECHAVENCIMIENTO"));

            
            contacto.setIdProducto(blprod.getProdbyId(rs.getInt("IDPRODUCTO")));

            
            contacto.setPaleta(blpal.getPaletabyID(rs.getInt("IDPALETA")));

            contacto.setFechaVencimiento(rs.getDate("FECHAREGISTRO"));
            contacto.setEstado(rs.getString("ESTADO"));

            contacto.setCantidad(rs.getInt("CANTIDAD"));

            
            contacto.setPosicionxrack(blposicion.getById(rs.getInt("idposicionxrack")));



            lspallet.add(contacto);
            }
        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"Error al obtener pallet",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        
        return lspallet;
    }

 public List<BEPallet> getPalletbyRack (int idRack)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        BEPallet contacto = null;
        String query = "SELECT idpallet,cantidad,fechavencimiento,p.idproducto,idpaleta,FECHAREGISTRO,p.estado, p.idposicionxrack FROM pallet p, posicionxrack pxr WHERE pxr.idrack = " + idRack
                            + " AND p.idposicionxrack=pxr.idposicionxrack";


         List <BEPallet> lspallet = new ArrayList <BEPallet>();
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            while(rs.next()){
            contacto = new BEPallet();

            contacto.setIdPallet(rs.getInt("IDPALLET"));
            contacto.setFechaVencimiento(rs.getDate("FECHAVENCIMIENTO"));

            BLProducto blprod = new BLProducto();
            contacto.setIdProducto(blprod.getProdbyId(rs.getInt("IDPRODUCTO")));

            BLPaleta blpal = new BLPaleta();
            contacto.setPaleta(blpal.getPaletabyID(rs.getInt("IDPALETA")));

            contacto.setFechaVencimiento(rs.getDate("FECHAREGISTRO"));
            contacto.setEstado(rs.getString("ESTADO"));

            contacto.setCantidad(rs.getInt("CANTIDAD"));

            BLPosicionxrack blposicion =new BLPosicionxrack();
            contacto.setPosicionxrack(blposicion.getById(rs.getInt("idposicionxrack")));



            lspallet.add(contacto);
            }
        }
        catch (Exception e)
     {
//          JOptionPane.showMessageDialog(null,"El rack: " +idRack + "no tiene pallets asignados",
//                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        return lspallet;
    }


     public List<BEPallet> buscarPallet(String idpallet, String idprod, String idpaleta, String estado,int idProveedor,int tipomov)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
 String query;
 if (tipomov==0 || estado.equals("TODOS"))
     estado="";

     if (tipomov==0)
             query = "SELECT * FROM pallet" ;
     else query = "SELECT idpallet,fechavencimiento,p.idproducto,idpaleta,FECHAREGISTRO,p.estado, cantidad, idposicionxrack FROM pallet p, productoxcontacto pxc  WHERE estado LIKE '%" +
                       estado + "%'"  + " AND p.idproducto=pxc.Idproducto";

if (tipomov==1 && !idpallet.equals("") )
    query+= " AND idpallet =" + idpallet ;


if (tipomov==1 && !idpaleta.equals("") )
    query+= " AND idpaleta =" + idpaleta;

if (tipomov==1 && !idprod.equals("") )
    query+= " AND p.idproducto ="+ idprod;

if (tipomov==1 && idProveedor > 0)
            query += " AND pxc.idcontacto = " + idProveedor;
 List <BEPallet> lspallet;
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);
            lspallet = new ArrayList<BEPallet>();
            BEPallet contacto = null;
            while (rs.next()){
                contacto = new BEPallet();

                contacto.setIdPallet(rs.getInt("IDPALLET"));

                BLProducto blprod = new BLProducto();

                //System.out.println(rs.getInt("IDPRODUCTO"));
                contacto.setIdProducto(blprod.getProdbyId(rs.getInt("IDPRODUCTO")));

                BLPaleta blpal = new BLPaleta();
                contacto.setPaleta(blpal.getPaletabyID(rs.getInt("IDPALETA")));
                contacto.setFechaVencimiento(rs.getDate("FECHAVENCIMIENTO"));
                contacto.setFechaRegistro(rs.getDate("FECHAREGISTRO"));


                contacto.setEstado(rs.getString("ESTADO"));

                contacto.setCantidad(rs.getInt("CANTIDAD"));

                BLPosicionxrack blposicion =new BLPosicionxrack();
                contacto.setPosicionxrack(blposicion.getById(rs.getInt("idposicionxrack")));


                lspallet.add(contacto);
            }



        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        return lspallet;
    }

 public List<BEPallet> buscarPalletUbicados()
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
 String query;
 
             query = "SELECT * FROM pallet where estado='UBICADO'" ;
    
 List <BEPallet> lspallet;
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);
            lspallet = new ArrayList<BEPallet>();
            BEPallet contacto = null;
            while (rs.next()){
                contacto = new BEPallet();

                contacto.setIdPallet(rs.getInt("IDPALLET"));

                BLProducto blprod = new BLProducto();

                //System.out.println(rs.getInt("IDPRODUCTO"));
                contacto.setIdProducto(blprod.getProdbyId(rs.getInt("IDPRODUCTO")));

                BLPaleta blpal = new BLPaleta();
                contacto.setPaleta(blpal.getPaletabyID(rs.getInt("IDPALETA")));
                contacto.setFechaVencimiento(rs.getDate("FECHAVENCIMIENTO"));
                contacto.setFechaRegistro(rs.getDate("FECHAREGISTRO"));


                contacto.setEstado(rs.getString("ESTADO"));

                contacto.setCantidad(rs.getInt("CANTIDAD"));

                BLPosicionxrack blposicion =new BLPosicionxrack();
                contacto.setPosicionxrack(blposicion.getById(rs.getInt("idposicionxrack")));


                lspallet.add(contacto);
            }



        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        return lspallet;
    }

      public void agregarIdposicionrack(int idpallet,int idrack)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        PreparedStatement s = null;
        java.util.Date fecha = new Date();
        String query = "UPDATE PALLET SET idposicionxrack=null where idpallet =" + idpallet  ;



        try
        {

           con = bd.conectar();
            s = con.prepareStatement(query);
            s.executeUpdate();


        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de insertar datos",
                        "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);

        }

        bd.cierraConexion(con);

    }


      public int getNumerodePallet (int idProducto,int idtipopaleta)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        int n;
        String query = "SELECT count(*) as CANTIDAD FROM pallet A, paleta B WHERE A.idpaleta = B.idpaleta" +
                " AND A.idproducto=" + idProducto+ " AND A.estado='UBICADO' AND B.idtipopallet =" +idtipopaleta;

        //JOptionPane.showMessageDialog(null,query,"Querry",JOptionPane.ERROR_MESSAGE);

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            rs.next();

            n=rs.getInt("CANTIDAD");

        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"No hay Pallets registrados con este tipo de Paletas",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 0;
        }

        bd.cierraConexion(con);
        return n;

    }



     
   public void cambiarEstado (int idpallet,String estado)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        PreparedStatement s = null;
        java.util.Date fecha = new Date();
        String query = "UPDATE PALLET SET estado='" + estado + "' where idpallet =" + idpallet  ;



        try
        {

           con = bd.conectar();
            s = con.prepareStatement(query);
            s.executeUpdate();


        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de insertar datos",
                        "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);

        }

        bd.cierraConexion(con);

    }
   
   
   //para Despacho
   public ArrayList<BEPallet> getPalletsDespacho (int idproducto, int idtipopaleta){
       DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        BEPallet contacto = null;
        String query = "SELECT p.idpallet,p.cantidad,p.fechavencimiento,p.idproducto,p.idpaleta,FECHAREGISTRO,p.estado, p.idposicionxrack "
                + " FROM pallet p, paleta pa "
                + " WHERE p.idpaleta = pa.idpaleta AND pa.idtipopallet = " + idtipopaleta
                + " AND p.idproducto= " + idproducto + " AND p.estado='UBICADO' ";


         ArrayList <BEPallet> lspallet = new ArrayList <BEPallet>();
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            while(rs.next()){
            contacto = new BEPallet();

            contacto.setIdPallet(rs.getInt("IDPALLET"));
            contacto.setFechaVencimiento(rs.getDate("FECHAVENCIMIENTO"));

            BLProducto blprod = new BLProducto();
            contacto.setIdProducto(blprod.getProdbyId(rs.getInt("IDPRODUCTO")));

            BLPaleta blpal = new BLPaleta();
            contacto.setPaleta(blpal.getPaletabyID(rs.getInt("IDPALETA")));

            contacto.setFechaRegistro(rs.getDate("FECHAREGISTRO"));
            contacto.setEstado(rs.getString("ESTADO"));

            contacto.setCantidad(rs.getInt("CANTIDAD"));

            BLPosicionxrack blposicion =new BLPosicionxrack();
            contacto.setPosicionxrack(blposicion.getById(rs.getInt("idposicionxrack")));

            lspallet.add(contacto);
            }
        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"Error al obtener pallet",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        return lspallet;
       
   }
     
     
   public ResultSet generarFila(int codPosicion){
         DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null; 
        
        String query = "select idrack,fila,columna from posicionxrack ";
        
        
        try
        {
            //guardo los datos del perfil
            // and pallet.fecharegistro>=? and pallet.fecharegistro<=? and pallet.fechavencimiento>=? and pallet.fechavencimiento<=?"
            
            if (codPosicion!=0) query=query+" where  idposicionxrack= "+codPosicion;
                       
           
            //JOptionPane.showMessageDialog(null,query,"Error",JOptionPane.ERROR_MESSAGE);
            
            con = bd.conectar();
            
            PreparedStatement p=con.prepareStatement(query);
            
            rs=p.executeQuery();
            
           
           
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Reportes",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
            
        }
        bd.cierraConexion(con);
        
        return rs;
        
     
   
   
   
   
   
   
   
   }

    public boolean tienePalletsAsignados(int idProveedor) {
         DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        BEPallet contacto = null;
        String query = "SELECT idpallet,cantidad,fechavencimiento,p.idproducto,idpaleta,FECHAREGISTRO,p.estado, idposicionxrack FROM pallet p, productoxcontacto pxc WHERE pxc.idcontacto = " + idProveedor
                            + " AND p.idproducto=pxc.Idproducto";
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            bd.cierraConexion(con);
            int cant=0;
            while(rs.next()) cant++;
            
            if (cant>0)
            {
                return true;
            }
            else return false;
            
            
        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"Error al obtener pallet",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return false;
        }

        
        
    }
    
    public void cambiarPosicion (int id, int posicionxrack)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        String query = "UPDATE pallet SET idposicionxrack = "+posicionxrack+" WHERE idpallet = "+id;
        
        //JOptionPane.showMessageDialog(null,query,"Error",JOptionPane.ERROR_MESSAGE);
        
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de actualizar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
        }
        bd.cierraConexion(con);
    }
   
    public void limpiarPosicion (int id)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        String query = "UPDATE pallet SET idposicionxrack = null WHERE idpallet = "+id;
        
        //JOptionPane.showMessageDialog(null,query,"Error",JOptionPane.ERROR_MESSAGE);
        
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de actualizar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
        }
        bd.cierraConexion(con);
    }
    
    public boolean verficaVencimiento (int idPallet)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        String query = "SELECT * FROM PALLET WHERE FECHAVENCIMIENTO < CURRENT_DATE AND IDPALLET = " + idPallet;
        ResultSet rs = null;

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            bd.cierraConexion(con);
            int cant=0;
            while(rs.next()){
                cant++;
                rs.getInt("IDPALLET");
            }
            
            if (cant>0)
            {
                return true;
            }
            else return false;
            
            
        }
        catch (Exception e)
        {
//          JOptionPane.showMessageDialog(null,"Error al obtener pallet",
//                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return false;
        }
    }
   
}
